Skip to content

Question

https://github.com/anthropics/skills/blob/main/skills/algorithmic-art/SKILL.md 这是一个关于AI skill 的项目,在 Cursor 中也有 rules , Skills,Subagents,也有 mcp。对于我的理解来说,Cursor 中的 rules 和 skills 对我来说都是一个.md 文档,一个你写好规则让 AI 去阅读理解你的规范的。但是实际的 skills 里面可以是
my-skill/
├── SKILL.md          # 必需:指令 + 元数据
├── scripts/          # 可选:可执行代码
├── references/       # 可选:文档
└── assets/           # 可选:模板、资源

我其实不太明白这些东西到底有什么作用,还有比如说 mcp 也是一个代码工具。我这样举例吧:请使用掘金文章技能,返回后端类型的前5的文章链接

我们期待当前SpringAI可以通过调用掘金文章技能,帮助我们返回前5的文章链接,
此技能用于获取掘金(juejin.cn)网站的技术文章排行榜数据,包括:

文章分类列表(前端、后端、AI、移动开发等)
各分类的热门文章排行榜
文章详细信息(标题、作者、阅读量、点赞数等)
接下来,我们启动程序,然后看下程序最终的访问结果,可以看到成功出发了掘金技能,获取到了结果:
这个用 mcp 也可以做,直接写代码爬取也可以用,为什么要这么麻烦,skill 是在教育 AI 适用工具吗,那为什么不用 mcp 了

核心概念对比

1. Rules(规则)

本质:告诉 AI "你是谁、你应该怎么做"

Rules 是纯粹的行为约束和上下文注入。比如:

  • "始终使用中文回答"
  • "代码风格遵循 Google Java Style"
  • "提交信息使用 Conventional Commits 格式"

它不包含任何可执行逻辑,只是给 AI 设定"人格"和"规范"。

2. MCP(Model Context Protocol)

本质:给 AI 一个真正可调用的外部工具/API

MCP 是一个标准化的工具协议,让 AI 可以像调用函数一样调用外部能力。比如你项目里的 cursor-ide-browser MCP,它提供了 browser_navigatebrowser_snapshot 等工具,AI 可以直接调用它们来操控浏览器。

关键特点:

  • 有明确的输入/输出 schema
  • AI 自己决定何时调用、传什么参数
  • 是一个运行时的工具

3. Skills(技能)

本质:一套完整的"教程+工具包",教 AI 如何完成一类复杂任务

这是你最困惑的部分。Skills 的关键在于——它不仅仅是一个 .md 文档,而是一个包含策略、脚本、参考资料的完整方案包。

回答你的核心疑问:为什么不直接用 MCP?

用你的掘金文章例子来说明:

方案 A:直接写代码

java
*// 硬编码爬取逻辑*

HttpClient.get("https://api.juejin.cn/content_api/v1/content/article_rank?category_id=6809637769959178254")

问题:这段代码只能做这一件事,换个需求就得重写。而且 AI 不知道怎么用它。

方案 B:用 MCP

你可以写一个 MCP Server,暴露一个工具:

{
  "name": "get_juejin_articles",
  "parameters": { "category": "string", "limit": "number" }
}

AI 可以调用 get_juejin_articles(category="backend", limit=5)

这完全可行! 但你需要:

  • 自己写一个 MCP Server(Node.js/Python 服务)
  • 处理 API 认证、错误处理、数据格式化
  • 部署和维护这个服务

方案 C:用 Skill

juejin-skill/
├── SKILL.md              # 告诉 AI:"当用户问掘金文章时,执行以下步骤..."
├── scripts/
│   └── fetch_articles.sh  # 一个 curl 脚本,直接调用掘金 API
└── references/
    └── juejin_api.md      # 掘金 API 文档,分类 ID 对照表等

SKILL.md 里会写:

  1. 先读取 references/juejin_api.md 了解 API 格式
  2. 根据用户需求确定分类 ID
  3. 执行 scripts/fetch_articles.sh 获取数据
  4. 按格式返回结果

三者的本质区别

RulesMCPSkills
是什么行为规范可调用的工具任务完成方案
类比员工手册一把锤子一本操作手册 + 工具箱
AI 角色遵守规则调用工具阅读方案后自主执行
开发成本写 .md写服务端代码写 .md + 可选脚本
灵活性只约束行为固定的输入输出AI 可以灵活组合步骤

关键洞察:Skill 是在"教育 AI 使用工具"吗?

是的,但不完全是。 更准确地说:

  • MCP 是给 AI 一个"按钮"——AI 按下去就有结果,但 AI 只知道按钮的功能,不理解背后的逻辑。
  • Skill 是给 AI 一套"SOP(标准操作流程)"——AI 读完后理解整个任务的上下文、策略、注意事项,然后用它已有的能力(包括 MCP、Shell、代码执行等)去完成任务。

Skill 的真正价值在于:它可以编排多个工具和步骤,而且几乎零开发成本。

举个更复杂的例子:你截图里展示的那个 algorithmic-art Skill,它教 AI 如何创作算法艺术。这个任务涉及:

  1. 创作艺术哲学(纯文本推理)
  2. 读取 HTML 模板(文件操作)
  3. 编写 p5.js 代码(代码生成)
  4. 生成交互式控件(UI 设计)

这种多步骤、需要策略指导的复合任务,用 MCP 很难表达——你不可能写一个 create_algorithmic_art() 的 MCP 工具。但一个 Skill 文档就能教会 AI 整套流程。

什么时候该用什么?

  • 用 Rules:当你只需要约束 AI 的行为风格、编码规范时
  • 用 MCP:当你需要 AI 访问一个明确的外部服务/API,且交互模式是简单的请求-响应时
  • 用 Skills:当任务是复杂的、多步骤的、需要策略指导的,且你不想(或不需要)写一个完整的服务时
  • 用代码:当逻辑是应用核心功能的一部分,需要在生产环境稳定运行时

回到你的掘金例子——如果只是偶尔查一下文章排行,Skill 最轻量;如果是你应用的核心功能需要频繁调用,MCP 或直接写代码更合适。它们不是互斥的,而是不同抽象层次的工具。

Question

解释下https://github.com/anthropics/skills/blob/main/skills/algorithmic-art/SKILL.md 这个skill 概念的提起者和发明者,或者说解决了什么题。比如我要从 0-1 开发一个旅游出行的项, 我除了设计系统架构和需求之外,我是不是针对每个需求都要写个 skill,让AI 根据我这个去写代码了,像是项目经理安排程序开发员去写代码一样

Skill 这个概念的来源和它解决的问题

谁提出的?

Skill 这个概念在 AI Agent 领域并不是某一个人"发明"的,而是一个逐步演化的共识:

  • Anthropic(Claude 的开发公司)在 2025 年正式推出了 Skills 规范,将它标准化为 SKILL.md + scripts/ + references/ 的结构。你看到的 algorithmic-art 就是 Anthropic 官方的示例。
  • Cursor 也采纳了这个概念,在 IDE 中集成了 Skills 机制。
  • Spring AI Community 则进一步把它做成了 Java 生态的工具库(spring-ai-agent-utils),让 Spring AI 应用也能加载和使用 Skills。

它解决的核心问题是什么?

问题的本质:AI 什么都会一点,但什么都不精。

大语言模型知道"怎么处理 PDF",但它不知道你的团队处理 PDF 时的最佳实践、偏好的工具链、以及特定的注意事项。Skill 解决的是:把领域专家的知识打包成 AI 可以消费的格式。

用一个更直白的类比:

场景没有 Skill有 Skill
你让 AI 优化电脑AI 给你一堆通用建议AI 先执行脚本获取你的真实数据,再按指定话术给出针对性建议
你让 AI 处理 PDFAI 凭记忆推荐库和方法,可能过时AI 严格按你验证过的脚本和文档来做
你让 AI 做算法艺术AI 随便画个 CanvasAI 严格按模板结构、品牌规范、交互要求来创作

为什么不用 MCP 替代?

这是你问题的核心。答案是:它们解决的问题不在同一个层面。

让我画一个层次图:

markdown
┌─────────────────────────────────────────┐
│  Skill(策略层)                          │
│  "当用户要优化电脑时:                     │
│   1. 先执行 get_system_info.sh            │
│   2. 再执行 check_cleanable_files.sh      │
│   3. 按 reference.md 的话术风格输出        │
│   4. 用真实用户名替换模板中的称呼"          │
├─────────────────────────────────────────┤
│  MCP / 脚本执行(能力层)                  │
│  "执行一个 shell 脚本" / "调用一个 API"     │
├─────────────────────────────────────────┤
│  底层代码(实现层)                        │
│  curl / Python / Java 具体实现             │
└─────────────────────────────────────────┘
  • MCP 是单个工具的标准化接口——"我能调用什么"
  • Skill 是一套完整的行为方案——"我应该怎么做、先做什么后做什么、输出什么风格"

Skill 里可以包含 MCP 调用,也可以包含脚本执行,也可以只包含纯文本指导。它是一个更高层的编排概念。

举个具体对比:

掘金文章获取——用 MCP:

MCP 工具: get_juejin_articles(category, limit) → 返回 JSON 数据

AI 调用这个工具,得到数据,结束。

掘金文章获取——用 Skill:

# SKILL.md

当用户需要获取掘金文章时:

  1. 先确认用户要哪个分类(前端/后端/AI/...)
  2. 执行 scripts/fetch_articles.py 获取数据
  3. 对结果按热度排序
  4. 输出格式:标题 + 作者 + 链接 + 热度指标
  5. 如果热度差距很大,额外点评为什么第一名这么火

看到区别了吗?Skill 不只是"获取数据",还包含了怎么理解用户意图、怎么处理数据、怎么呈现结果的完整策略。


三、回到你的旅游项目问题

"如果我从 0-1 开发一个旅游出行项目,是不是每个需求都要写个 Skill?"

绝对不是! 这是一个常见的误解。

你需要区分:谁在用这些 Skill

场景 A:你用 Cursor/AI 辅助开发(开发期)

这时候 Skill 是给 Cursor 里的 AI 助手 用的。你可能会写:

  • 一个 Rule:告诉 AI "本项目使用 DDD 架构,数据库用 MySQL,ORM 用 MyBatis"
  • 一两个 Skill(可选):比如"生成新接口"Skill,告诉 AI 新接口要同时创建 Controller、Service、Repository、DTO,按什么命名规范

但你不需要为每个需求写 Skill。大多数需求,你直接用自然语言告诉 AI 就行了。

场景 B:你的旅游应用本身集成了 AI Agent(运行期)

如果你的旅游 App 有一个 AI 客服/旅行规划师,那你可能需要给这个 AI Agent 配备 Skills:

  • 酒店推荐 Skill:教 AI 怎么调用酒店 API、怎么根据用户偏好排序、怎么展示结果
  • 行程规划 Skill:教 AI 考虑交通、时间、景点开放时间等约束条件
  • 天气查询:这个简单,用 MCP 就够了,一个工具调用搞定

总结判断标准

需求特点用什么
简单的数据查询(天气、汇率)MCP 或直接代码
需要策略指导的复杂任务Skill
AI 的行为规范和代码风格Rules
应用核心业务逻辑直接写代码,这不是 AI 运行时做的事

Skill 不是项目经理分配任务单,而是"领域专家手册"。 你不需要为每个需求都写 Skill,只需要为那些"AI 不看手册就会做错/做得不好"的复杂场景写 Skill。对于旅游项目,可能 3-5 个关键 Skill 就够了,大部分功能还是正常写代码。

Powered by VitePress